#include "shmem.h"

static struct shm_param para;

union val_t
{
    int b_val;   // bool类型存储空间
    int i_val;   // 整形值存储空间
    float f_val; // 浮点值存储空间
};
struct std_node
{
    int key;             // 唯一键值
    int type;            // 数据点类型
    int dev_type;        // 数据点属于哪个设备，根据网关支持的设备自行定义
    union val_t old_val; // 变化上报后需要更新旧值
    union val_t new_val; // 从共享内存取出最新数据，放到new_val中
    int ret;             // 默认为-1，采集成功后设置为0，采集失败再置-1
};
double Past=0;
static int *total;                       // 指向共享内存中数据节点总个数
static struct std_node *node_arr = NULL; // 指向共享内存中节点缓存数组头

#define MAX_NODE 128  //最大支持学生数目
#define STD_NODE_LEN sizeof(struct student)
#define MAX_NODE_SIZE (MAX_NODE * STD_NODE_LEN)

int main(int argc, char *argv[])
{
    int ret = -1;

    ret = shm_init(&para, "shm_test", 1024);
    if(ret < 0)
    {
        return -1;
    }


    void *node_p = shm_getaddr(&para);
    if(node_p == NULL)
    {
        return -1;
    }

    //前4个字节存储实际的学生数目
    total = (int *)node_p;
    //后面空间存储数据点
    node_arr = (struct std_node  *)(node_p + sizeof(int));

    printf("num = %d\n", *total);
    while(1)
    {
        int i;
    for(i=0; i<2; i++)
    {
        printf("key=%d, value=%.2f\n", \
               node_arr[i].key,\
               node_arr[i].new_val.f_val);
    
    }
    sleep(1);
    }
    

    //这个接口只有在这块共享内存不用了才能删除，项目中如果一直使用，不要调用这个接口
    shm_del(&para);

    return 0;
}
